#include <iostream>
using namespace std;
#include <stdio.h>
#include <stdlib.h>
#define InitSize 10

typedef struct 
{
    int *data;
    int length;
}SqList;

//初始化顺序表，动态分配10个长度，初始化脏数据，初始化length
bool InitList(SqList &L){
    L.data=(int *)malloc(InitSize*sizeof(int));
    for(int i=0;i<InitSize;i++){
        L.data[i]=0;
    }
    L.length=0;
	return true;
}

//插入元素，判断能否插入：表为满不能插入，插在【length】，更新长度，返回bool值
bool InsertList(SqList &L,int e){
    if(L.length<InitSize){
        L.data[L.length]=e;
        L.length++;
        return true;
    }
    else 
        return false;
    
}

//用于输出当前顺序表
void PList(SqList L){
    for(int i=0;i<L.length;i++){
        printf("data[%d]=%d\n",i,L.data[i]);
    }
}

//删除最小值，并填补：访问一个，比一个，更新最小值下标index以及值
//直到超过长度，将【length】赋给【index】，返回value
int DelMin(SqList &L){
    int index=0;
    int min=L.data[0];
    for(int i=0;i<L.length;i++){
        if(L.data[i]<min){
            min=L.data[i];
            index=i;
        }
    }
    L.data[index]=L.data[L.length-1];
    return min;
}

//元素逆置：用一个temp接住第i个，从后访问第j个，当i<j时，继续交换值
bool ReverseList(SqList &L){
    int i,j;
    int temp=0;
    for(i=0,j=L.length-1;i<j;i++,j--){
        temp=L.data[i];
        L.data[i]=L.data[j];
        L.data[j]=temp;
    }
    return true;
}

//
int main(){
    SqList L;
    InitList(L);

    InsertList(L,6);
    InsertList(L,2);
    InsertList(L,5);
    InsertList(L,1);
    InsertList(L,4);
    PList(L);
    int value = DelMin(L);
    printf("the deleted value is:%d\n",value);
    PList(L);
    ReverseList(L);
    PList(L);
    return 0;
}